home *** CD-ROM | disk | FTP | other *** search
- /*
- File: StorageClassDriverAPI.h
-
- Contains: xxx put contents here xxx
-
- Version: xxx put version here xxx
-
- Copyright: © 1998 by Apple Computer, Inc., all rights reserved.
-
- */
-
- #ifndef __STORAGEDRIVERAPI__
- #define __STORAGEDRIVERAPI__
-
- #include <usb.h>
-
- #define kDispatchTableVersion 0
- #define kRequestPending 1
-
- // Return codes from the class driver
- #define kCommandBusyError -10000
-
- enum ControlSelectors
- {
- kControlDisableRemoval = 0,
- kControlEnableRemoval
- };
-
- enum StatusSelectors
- {
- kStatusConfiguration = 0,
- kStatusDeviceStatus,
- kStatusRemovalStatus
- };
-
- enum driverConfigurationStatus
- {
- kNotConfigured = 0,
- kConfigureInProgress,
- kConfigureComplete,
- kConfigureFailed
- };
-
-
- #define kCDBSize 12 // Per the USB Mass Storage Class spec.
-
- // RBC Device command operation codes
- enum {
- kReadBlocks = 0x28,
- kReadCapacity = 0x25,
- kStartStopUnit = 0x1b,
- kSynchronizeCache = 0x35,
- kWriteBlocks = 0x2a,
- kVerifyBlocks = 0x2f
- };
-
- //typedef CALLBACK_API_C( OSStatus , StorageBlockRWProcPtr )(void* storageBlockRWPBPtr );
- typedef CALLBACK_API_C( OSStatus , StorageExecuteCommandProcPtr )(void* storageExecuteCommandPBPtr );
- typedef CALLBACK_API_C( void , StorageClassCompletionProcPtr )(void* storageClassPBPtr );
-
-
- struct StorageStatusPB {
- StorageClassCompletionProcPtr completionProc; // -> Completion routine
- UInt8 deviceStatus[2]; // <- Two bytes of status
- OSStatus status; // <- Result of operation
- };
- typedef struct StorageStatusPB StorageStatusPB;
- typedef StorageStatusPB * StorageStatusPBPtr;
-
-
- struct StorageControlPB {
- UInt32 selector; // -> Operation to perform
- StorageClassCompletionProcPtr completionProc; // -> Completion routine
- OSStatus status; // <- Result of operation
- };
- typedef struct StorageControlPB StorageControlPB;
- typedef StorageControlPB * StorageControlPBPtr;
-
-
- struct StorageBlockRWPB {
- UInt32 startBlock; // -> Starting logical block number
- UInt32 blockCount; // -> Number of logical blocks to R/W
- Ptr userBuffer; // -> Pointer to user buffer
- UInt32 expectedCount; // -> Expected number of bytes to transfer
- StorageClassCompletionProcPtr completionProc; // -> Completion routine
- UInt32 actualCount; // <- Actual number of bytes transferred
- OSStatus status; // <- Result of operation
- };
- typedef struct StorageBlockRWPB StorageBlockRWPB;
- typedef StorageBlockRWPB * StorageBlockRWPBPtr;
-
-
- struct StorageExecuteCommandPB {
- UInt8 cdb[kCDBSize]; // -> CDB to send to device
- UInt32 flags; // -> Data transfer flags (See below)
- Ptr userBuffer; // -> Pointer to user buffer
- UInt32 expectedCount; // -> Expected number of bytes to transfer
- StorageClassCompletionProcPtr completionProc; // -> Completion routine
- UInt32 actualCount; // <- Actual number of bytes transferred
- OSStatus status; // <- Result of operation
- };
- typedef struct StorageExecuteCommandPB StorageExecuteCommandPB;
- typedef StorageExecuteCommandPB * StorageExecuteCommandPBPtr;
-
- // Data transfer flags for StorageExecuteCommandPB
- enum {
- kStorageDataIn = 0x0001,
- kStorageDataOut = 0x0002,
- kStorageNoData = 0x0004
- };
-
- typedef CALLBACK_API_C( OSStatus , StorageInitializeProcPtr )(void);
-
- typedef CALLBACK_API_C( OSStatus , StorageControlProcPtr )(UInt32 theControlSelector, void *theControlData);
-
- typedef CALLBACK_API_C( OSStatus , StorageStatusProcPtr )(UInt32 theInfoSelector, void *theInfo);
-
-
- struct StorageClassDispatchTable {
- UInt32 dispatchTableVersion;
- StorageInitializeProcPtr pStorageInitialize;
- StorageControlProcPtr pStorageControl;
- StorageStatusProcPtr pStorageStatus;
- StorageExecuteCommandProcPtr pStorageExecuteCmd;
- };
- typedef struct StorageClassDispatchTable StorageClassDispatchTable;
- typedef StorageClassDispatchTable * StorageClassDispatchTablePtr;
-
-
- EXTERN_API_C( OSStatus )
- StorageInitialize (void);
-
- EXTERN_API_C( OSStatus )
- StorageControl (UInt32 theControlSelector, void *theControlData);
-
- EXTERN_API_C( OSStatus )
- StorageStatus (UInt32 theInfoSelector, void *theInfo);
-
- EXTERN_API_C( OSStatus )
- StorageBlockRead (StorageBlockRWPBPtr storageBlockRWPBPtr );
-
- EXTERN_API_C( OSStatus )
- StorageBlockWrite (StorageBlockRWPBPtr storageBlockRWPBPtr );
-
- EXTERN_API_C( OSStatus )
- StorageExecuteCommand (StorageExecuteCommandPBPtr storageExecuteCommandPBPtr );
-
- #endif